這篇文章主要是要通過學習 NAT 了解在不同設備之間進行連接時可能遇到的挑戰。
NAT,全稱為 Network Address Translation(網絡地址轉換),
是一種將內部 IP 與外部 IP 互相轉換之技術。
隨著互聯網的迅速增長,為了解決 IPv4 地址有限的問題,而產生 NAT 技術使得多個裝置可以共享單一公共 IPv4 地址,節省了 IP 資源,並延長了 IPv4 地址的使用壽命。NAT 可以將你家或公司內部的設備,像是電腦、手機等,的私人地址轉換成外部網路的公共地址,這樣可以節省公共地址的使用,讓更多人可以連上互聯網。
最常見的 NAT 設備就是家用路由器(Home Routers)讓多個內部設備使用不同的內部IP地址(例如192.168.0.x),但它們共享相同的公共IP地址(例如203.0.113.1)。NAT通過轉換內部設備的地址,讓它們能夠與外部網絡溝通。除此之外防火牆通常包含NAT功能,以增加網絡安全性並控制內部設備的訪問外部網絡。
圖片來源:自製
不同類型的 NAT 可能導致不同的連接問題,並需要不同的解決方法。以下是一些常見的NAT類型:
Full Cone NAT(全錐形NAT)
允許外部主機通過 port 訪問內部主機,並在內部主機的通信中保持相同的外部 port 。
Restricted Cone NAT(受限錐形NAT)
限制了外部主機只能回應內部主機的通信,而不能主動發起通信。這可能需要使用STUN 服務來穿越NAT。
Port Restricted Cone NAT(端口受限錐形NAT)
不僅限制了外部主機的 IP 地址,還限制了port 。對於WebRTC,通常需要 STUN 服務來克服這種NAT。
Symmetric NAT(對稱NAT)
這是最複雜的NAT類型,它為每個外部目標分配不同的外部 IP 和端口,通常需要使用 TURN 服務來處理對稱 NAT。
對於 WebRTC 來說,Full Cone NAT 是最友好的 NAT 類型,而其他 NAT 類型可能需要使用 ICE 協議、STUN 和 TURN 來克服相關問題。
對於 WebRTC 來說,兩個瀏覽器嘗試建立連接時若是私有 IP 地址會有無法直接通信的問題。為了克服這一問題,WebRTC 使用 RTCIceServer 來幫助瀏覽器發現最合適的路徑,以解決 NAT 和防火牆的障礙,確保 WebRTC 通信可以順利進行。
WebRTC 的 ICE 協議包括 STUN 和 TURN 協議,用於找到可用且最佳的數據通道連接。這套框架目的是為了克服 NAT 和防火牆的障礙,確保 WebRTC 瀏覽器間的實時通信能夠順暢運作。
還記的前面有題到 NAT 是為了防止 IPv4 位址的枯竭的解決方案,但隨著未來 IPv6 位址的推廣,NAT 不再被需要。
這篇文章簡單的了解 NAT 也有提到對於連線上的困難下篇會再說說 STUN 和 TURN 以及 ICE 是什麼他是如何解決 IP 地址連線上的問題
參考資料
What is NAT and its Types? Best Explained - 2023 (nwkings.com)
Web 前端 WebRTC 攻略: NAT 穿越與 ICE - 閱坊 (readfog.com)
講得很清楚👉cs.nccu.edu.tw/~lien/Writing/NGN/firewall.htm